home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1997 August / Walnut Creek CDROM.7z / VOL_400 / 439_01 / README.DOC < prev    next >
Encoding:
Text File  |  1995-11-12  |  26.2 KB  |  529 lines

  1. File Dated:  11/14/95
  2.  
  3. ******************************************************************************
  4. Quick Start with XLIB
  5. ******************************************************************************
  6.  
  7.    The user manual is largely dedicated to cover specifics of XLIB which 
  8. will not be of concern to many programmers.  A few notes are added here to
  9. expedite matters for these programmers.
  10.    If you are not an assembly language programmer, then consider using 
  11. EASYX rather than XLIB.  EASYX does not require use or knowledge of 
  12. assembly language.  The documentation for EASYX is in the file EASYX.DOC.
  13.    If you are familiar with assembly language, then start by reading the 
  14. file DONTREAD.ME.  This file is for those who don't particularly enjoy 
  15. reading 60 page user manuals.  It is an excellent tutorial.  You will 
  16. probably be ready to program with XLIB after working through the tutorial.
  17.    If your program is to be written exclusively in assembly language, then
  18. examine the files FLAT.INC and FLAT.ASM.  FLAT.INC is an include file which
  19. enables flat-model programming in DOS.  FLAT.ASM illustrates usage of
  20. FLAT.INC.
  21.  
  22. ******************************************************************************
  23. Frequently Encountered Problems When Starting XLIB
  24. ******************************************************************************
  25.  
  26.    The most frequently reported problem with XLIB is in fact no problem at
  27. all.  XLIB presents a registration reminder message when terminating.  Some 
  28. interpret this message as meaning that the shareware version of XLIB is 
  29. disabled.  This is not the case.  The shareware version is fully 
  30. functional.  You must register XLIB to obtain a copy of the library that 
  31. does not present the message.
  32.    The registration reminder message is actually a confirmation that XLIB
  33. has been initiated and terminated successfully.  If this message doesn't 
  34. appear in the shareware version, then the main program almost certainly has
  35. a bug preventing clean termination.
  36.    The second most frequently reported problem is by assembly language
  37. programmers who find that attempts to initialize XLIB (with INITXLIB) fail
  38. for lack of DOS memory.  MASM programmers must remember to link with the
  39. CPARM:1 parameter.  TASM programmers must resize the memory block into
  40. which DOS loaded the program (see EXAMP1B.ASM).
  41.  
  42. ******************************************************************************
  43. Improvements in XLIB Version 5.1 Over Version 5.0
  44. ******************************************************************************
  45.  
  46. 1) FLAT.INC and PMIO.INC contained statements which assumed the presence 
  47.    of a floating point unit.  These files have been generalized under 
  48.    version 5.1.
  49.  
  50. 2) PMXLOAD did not limit file loads to the size of the destination memory
  51.    block.  This bug has been fixed in version 5.1.
  52.    
  53. ******************************************************************************
  54. Registering XLIB
  55. ******************************************************************************
  56.  
  57.    XLIB may be registered for $50.  Registrants will be sent a registered
  58. copy of the XLIB archive along with a printed copy of the user manual.
  59. Technical support is provided for both registered and unregistered users;
  60. however, if you have used technical support or intend to use it, then the
  61. registration fee is $70.
  62.  
  63. There are four ways to register XLIB.  We prefer that you use one of the
  64. first two methods:
  65.  
  66. 1) By email using MasterCard or Visa:
  67.  
  68.    Edit the form in the file EMAIL.REG then email the file to TechniLib.
  69.  
  70. 2) By mail to TechniLib:
  71.  
  72.    Send check or money order along with return address to:
  73.  
  74.    TechniLib Company
  75.    P.O. Box 6818
  76.    Jackson, Ms 39282
  77.    USA
  78.  
  79.    Please write "XLIB" on check or include an explanatory note.  An email 
  80. address would also be appreciated.
  81.  
  82. 3) By credit card through Public (software) Library:
  83.  
  84.    You can order with MC, Visa, Amex, or Discover from Public (software)
  85. Library by calling 800-2424-PsL or 713-524-6394 or by FAX to 713-524-6398
  86. or by CIS email to 71355,470.  You can also mail credit card orders to PsL
  87. at P.O.Box 35705, Houston, TX 77235-5705.  The product ID for XLIB is 11077.
  88.  
  89.    THE ABOVE NUMBERS ARE FOR ORDERS ONLY.  Any questions about the status of 
  90. the shipment of the order, refunds, registration options, product details, 
  91. technical support, volume discounts, dealer pricing, site licenses, etc, 
  92. should NOT be directed to PsL.  Direct all such questions to TechniLib.
  93.  
  94. 4) Through CompuServe:
  95.    
  96.    Use GO SWREG (shareware registration).  The program identification number 
  97. is 1778.  The program title is XLIB 5.1.
  98.  
  99.  
  100.    XLIB may be registered for $50.  Registrants will be sent a registered
  101. copy of the XLIB archive along with a printed copy of the user manual.
  102. Technical support is provided for both registered and unregistered users;
  103. however, if you have used technical support or intend to use it, then the
  104. registration fee is $70.
  105.  
  106. ******************************************************************************
  107. Obtaining the Most Recent Version of XLIB
  108. ******************************************************************************
  109.  
  110.    The most recent version of XLIB may be downloaded from:
  111.  
  112. 1) CompuServe - GO MSLANG or GO BCPPDOS then choose ASSEMBLER.
  113. 2) Internet -   oak.oakland.edu under directory \simtel\msdos\c
  114.  
  115.    Expect the archive to be named either XLIBvv.ZIP or DXLIBvv.ZIP where
  116. vv denotes the version number.
  117.    Keywords for XLIB include:  XMS, DPMI, VCPI, DOS, EXTENDER, PROTECTED
  118. MASM, TASM, TECHNILIB.
  119.  
  120. ******************************************************************************
  121. Communicating with TechniLib Via Electronic Mail
  122. ******************************************************************************
  123.  
  124.    You can communicate with TechniLib via CompuServe or Internet electronic 
  125. mail.  Direct CompuServe mail to user ID: 74730,167.  Internet users should
  126. use the address: 74730.167@compuserve.com.  Internet users may also send
  127. mail to davidpyles@delphi.com.
  128.  
  129. ******************************************************************************
  130. Instructions for Constructing Protected-Mode Libraries for Microsoft
  131. ******************************************************************************
  132.  
  133.    The following batch file uses Microsoft LIB to combine an OBJ file with
  134. XLIB.LIB to produce a protected-mode library.  Call the batch file using the
  135. base name of the OBJ file as the argument.  This base name will also be 
  136. given to the library.  It is assumed that the OBJ file and XLIB.LIB are in 
  137. the current directory.  LIB.EXE is assumed to be in the ..\BIN directory.
  138.  
  139. @echo on
  140. del %1.lib
  141. ..\bin\lib %1.lib /noi +%1.obj+xlib.lib;
  142.  
  143.    The following batch file uses Microsoft LINK and LIB to combine an OBJ
  144. file with XLIB.LIB to produce a protected-mode library and quick library for
  145. Microsoft BASIC 7.0.  Call the batch file using the base name of the OBJ
  146. file as the argument.  This base name will also be given to the library and
  147. the quick library.  It is assumed that all files apart from LINK.EXE and
  148. LIB.EXE are in the current directory.  The current directory must also
  149. contain the file QBXQLB.LIB (included in the BASIC distribution disks).
  150. LINK.EXE and LIB.EXE are assumed to be in the ..\BIN directory.
  151.  
  152. @echo on
  153. del %1.qlb
  154. del %1.lib
  155. ..\bin\link /q/nopackf xlib.lib+%1.obj,%1.qlb,,qbxqlb.lib;
  156. ..\bin\lib %1.lib +xlib.lib+%1.obj;
  157.  
  158.    The following command may be used to create a quick library from 
  159. EASYX.LIB.  The quick library is called EASYX.QLB:
  160.  
  161. ..\bin\link /q/nopackf easyx.lib,easyx.qlb,,qbxqlb.lib;
  162.  
  163. ******************************************************************************
  164. Instructions for Constructing Libraries and Linking with Borland
  165. ******************************************************************************
  166.    
  167.    The following batch file uses TLINK to link an OBJ file from TASM with
  168. XLIBB.LIB to produce a DOS-extended executable.  The base name of the OBJ
  169. is supplied as an argument to the batch file.  The executable will be given 
  170. the same base name as the OBJ file.  It is assumed that the OBJ file is in 
  171. the current directory and that TLINK is in the ..\BIN directory.
  172.  
  173. @echo on
  174. ..\bin\tlink /3/c %1.obj,,,xlibb.lib
  175.  
  176.    The following batch file uses Borland TLIB to combine an OBJ file with
  177. XLIBB.LIB to produce a protected-mode library.  Call the batch file using 
  178. the base name of the OBJ file as the argument.  This base name will also be 
  179. given to the library.  It is assumed that XLIBB.LIB and the OBJ file are in 
  180. the current directory.  TLIB is assumed to be in the ..\BIN directory.
  181.  
  182. @echo on
  183. del %1.lib
  184. ..\bin\tlib /C %1.lib +xlibb.lib+%1.obj
  185.  
  186.    Borland C and Turbo C users can compile within the IDE; however, they 
  187. must use the command line linker because an option will be needed which is 
  188. not included in the IDE linker.  In particular, the /3 option will be needed 
  189. to enable processing of 32-bit segments.  The appropriate commands to TLINK 
  190. will depend upon the memory model being used.  The following batch command 
  191. will link a program called MYPROG with a library call MYLIB under the large 
  192. memory model.  The batch command must be issued from the directory 
  193. containing MYPROG.OBJ.  It is assumed that TLINK is in the ..\BIN directory 
  194. and that MYLIB.LIB is in the ..\LIB directory.  It is also assumed that all 
  195. of the C link libraries are in the ..\LIB directory.  The resulting 
  196. executable will be called MYPROG.EXE and the map file will be called 
  197. MYPROG.MAP.  The command line is lengthy and is therefore broken into two 
  198. lines below.
  199.  
  200.                            --------------------- model specification
  201.                            .   ----------------- obj file name
  202.                            .   |      ---------- exe file name
  203.                            .   |      |      --- map file name
  204.                            . ______ ______ ______
  205. ..\bin\tlink /3/c ..\lib\c0l myprog,myprog,myprog,
  206.  
  207.    ..\lib\mylib ..\lib\fp87 ..\lib\mathl ..\lib\cl 
  208.           -----                        .         .
  209.             |                          -------------- model specification
  210.             ----------------------------------------- lib file name
  211.  
  212.  
  213.    To link under the small memory model, replace "l" with "s" at the model
  214. specification characters.  Use "m" for the medium model; "c" for the compact
  215. model, and "h" for the huge model.
  216.  
  217. ******************************************************************************
  218. NOEMS and Equivalent Options
  219. ******************************************************************************
  220.  
  221.    Early versions of XLIB did not initialize properly when the NOEMS or
  222. equivalent option was being used on the memory manager.  This problem should 
  223. be corrected under version 4.1, but we suggest avoiding NOEMS.  If the upper 
  224. memory area used by the page is needed, then try FRAME=NONE or equivalent 
  225. option.
  226.    When EMS is present, VCPI has control of the machine.  This means that
  227. XLIB must work cooperatively with VCPI when performing switches to protected
  228. mode; otherwise, XLIB would cause a protection violation (exception #13).
  229. VCPI is a subset of EMS.  When NOEMS is used, it appeared to former 
  230. versions of XLIB that VCPI was absent.  The latter assumption was false, 
  231. because the memory manager was hiding VCPI behind the NOEMS option.  XLIB 
  232. then proceeded to perform uncooperative mode switches.  This then generated 
  233. the exception.  Versions 4.1 and later take measures to detect a deceptive
  234. memory manager.
  235.  
  236. ******************************************************************************
  237. General Debugging Instructions
  238. ******************************************************************************
  239.  
  240.    See the file SWAT.DOC for instructions toward obtaining a powerful
  241. protected-mode debugger.
  242.    Neither Turbo Debugger nor Codeview will be able to debug protected-mode
  243. instructions.  However, one should still be able to use the debuggers for
  244. real-mode areas of a program.  Simply step over calls to protected-mode
  245. procedures.
  246.    Some debuggers tend to have problems when XLIB is initialized for DPMI.  
  247. Use VCPI instead.  This is done by setting bit 0 of IFLAGS.  Of course, a 
  248. VCPI driver needs to be loaded.  EMM386, QEMM386, and 386MAX all have VCPI.  
  249. VCPI cannot run in Windows or OS/2.  
  250.    In the event one can debug under DPMI 1.0, then it must be remembered
  251. that XLIBE and XLIBEB attempt to trap exceptions in real mode, including
  252. debug exceptions and breakpoints.  This probably will not interfere with
  253. the debugger; however, if problems occur, these features should be disabled 
  254. by setting bit 1 of IFLAGS.  This disables all exception trapping and 
  255. prevents remap of hardware interrupts.
  256.    
  257. ******************************************************************************
  258. Instructions for Debugging in the Borland IDE
  259. ******************************************************************************
  260.  
  261.    To run the IDE debugger, XLIB should be initialized for VCPI.  However,
  262. under the default behavior of the IDE, a VCPI program will not be able to
  263. allocate extended memory within the IDE.  There are potentially two reasons 
  264. for this.  First, the default behavior of the DPMI kernel under which the 
  265. IDE operates is to claim all EMS memory and convert it to DPMI memory.  
  266. Since VCPI seeks extended memory through EMS, no extended memory will appear 
  267. to be available.  To limit the memory consumption of the DPMI kernel, 
  268. include a statement such as the following in the batch file used to invoke 
  269. the IDE:
  270.  
  271. set dpmimem=maxmem 2000
  272.  
  273. This statement limits the memory usage of the DPMI kernel to 2000Kb.  If
  274. EMS memory exceeds this amount, then EMS memory will be available to the 
  275. IDE.  However, EMS memory will not be available to a VCPI program running 
  276. within the IDE if the IDE has itself consumed all EMS memory.  Therefore, 
  277. one may have to limit EMS memory usage of the IDE.  This can be done in the 
  278. OPTIONS|ENVIRONMENT|STARTUP menu of the IDE.  Typically, EMS memory usage
  279. should be set to zero here.
  280.  
  281. ******************************************************************************
  282. Known Bugs/Peculiarities in Memory Managers, Operating Systems, and Compilers
  283. ******************************************************************************
  284.  
  285. QEMM and QDPMI:
  286. ---------------
  287.  
  288. 1) All versions of QDPMI appear to map physical address spaces incorrectly.
  289.    The actual mapping call will succeed; however, this call affects QDPMI
  290.    internally such that subsequent calls to allocate extended memory do not
  291.    function correctly.  This means that MAPIO and PMMAPIO will not work
  292.    reliably with QDPMI.
  293.  
  294. 2) QDPMI apparently does not function properly when the NOEMS option has 
  295.    been used on QEMM.  NOEMS typically should not be used with any memory 
  296.    manager.  If you need the space normally allocated to the EMS page frame, 
  297.    then set FRAME=NONE (or equivalent option) instead of using NOEMS.
  298.  
  299.    These problems have been reported to Quarterdeck.  Corrections are
  300. expected in the near future.
  301.  
  302. 386MAX:
  303. -------
  304.  
  305. 1) 386MAX versions 6.X and 7.0 leave interrupts disabled after calls to
  306.    certain VCPI memory management functions.  This means that when VCPI is
  307.    being used, interrupts will be disabled after calls to PMGETMEM, 
  308.    PMFREEMEM, PMRESETMEM, and PMMAPIO.
  309.  
  310. 2) 386MAX version 7.0 does not properly report the virtual debug status
  311.    register (virtual DR6) upon debug exceptions.  Consequently, the DR6
  312.    value presented by the XLIBE exception handler will not be valid.  This
  313.    version also fails to clear debug breakpoints upon termination, as 
  314.    required of DPMI 1.0 hosts.  XLIBE corrects the latter problem by 
  315.    clearing breakpoints itself when terminating.
  316.  
  317. 3) 386MAX version 7.0 apparently mismanages exception #13 from real mode.
  318.    When the XLIBE exception handler attempts to terminate after such 
  319.    exceptions, a second exception #13 occurs.  This has not proven to be a
  320.    major problem.  Simply ignore the second exception.
  321.  
  322.    386MAX version 7.01 apparently corrects all of the above problems found
  323. in version 7.0.  Qualitas has made a patch available to implement these
  324. corrections.  Download the patch from the Qualitas BBS (301-907-8030).  The
  325. patch for 386MAX is M701R.ZIP.  The patch for BlueMax is B701R.ZIP.
  326.  
  327. OS/2:
  328. -----
  329.  
  330.    OS/2 3.0 (Warp) and possibly previous versions do not preserve the high
  331. word of EDX upon certain calls to INT 21H function 3DH (open file).  XLIB
  332. version 5.0 takes corrective action on this bug.
  333.  
  334. Windows 3.1:
  335. ------------
  336.  
  337.    Windows DPMI doesn't handle INT 3 properly.  The XLIB exception handler
  338. never receives control under this interrupt under Windows.
  339.  
  340. TASM 4.0:
  341. ---------
  342.  
  343.    TASM 4.0 does not necessarily place DGROUP as the last segment if other
  344. data segments are defined after the .MODEL statement; consequently, it
  345. cannot be assumed that the stack will be located at the end of the program.
  346. This creates a problem when it becomes necessary to determine the size of
  347. a program for purposes of resizing the memory block in which DOS has placed
  348. it.  The easiest way to correct this problem is by using FARSTACK in the 
  349. .MODEL statement.  If the stack must be in DGROUP (NEARSTACK), then all
  350. data segments should be defined before .MODEL and should be given a combine
  351. type of 'FAR_DATA'.  This implies that if XLIBB or XLIBEB are to be used 
  352. with NEARSTACK, then XLIBB.INC should be placed before .MODEL.
  353.  
  354. ******************************************************************************
  355. Real-Mode Exception Trapping with DPMI Version 1.0 
  356. ******************************************************************************
  357.  
  358.    DPMI 1.0 enables XLIBE to trap exception in real mode.  This makes XLIBE
  359. potentially useful to programmers who would otherwise have no interest in
  360. protected-mode programming.  Simply place a call to INITXLIB early in your
  361. program and link with XLIBE.LIB (XLIBEB.LIB for Borland users) to implement
  362. this feature.
  363.    386MAX version 7.X is the only DPMI 1.0 host of which we are presently 
  364. aware.  Version 7.01 is an outstanding product.
  365.  
  366. ******************************************************************************
  367. Contracted Programming and Consultation
  368. ******************************************************************************
  369.  
  370.    TechniLib will perform contract programming at competitive rates.
  371. TechniLib will also serve as a consultant to other programmers.  Contact
  372. TechniLib through the channels presented above.
  373.  
  374. ******************************************************************************
  375. TechniLib Products
  376. ******************************************************************************
  377.  
  378.    TechniLib supplies numerous useful libraries to C, C++, and Assembly 
  379. language programmers.  Libraries are also available for BASIC, PASCAL, 
  380. FORTRAN, and other languages.  Most TechniLib libraries are written in 
  381. assembly code; therefore, they are extremely fast and relatively small.
  382. These libraries can typically be found on CompuServe (GO MSLANG or GO
  383. BCPPDOS).  Do a keyword search for TECHNILIB.  Interested parties may
  384. also send inquiries directly to TechniLib by email.
  385.  
  386. Library    Description
  387. ---------  -----------
  388. TRAN.LIB   High performance random number generators for uniform and
  389.            normal distributions.  Designed for C and C++.
  390.            
  391. TPROB.LIB  Density functions, cumulative density functions, and inverse
  392.            cumulative density functions for many of the major probability
  393.            distributions (e.g. Normal, Chi-Squared, Gamma, Binomial, etc.).
  394.            Includes other probability-related functions as well.  Designed
  395.            for C and C++.
  396.  
  397. TXMS.LIB   An interface to XMS (HIMEM.SYS) for C and C++.  Provides very
  398.            easy access to extended memory.
  399.  
  400. BSTR.LIB   BASIC-style string functions for C and C++.  
  401.  
  402. TCIO.LIB   IO functions for C and C++.  Featuring tprintf(), a function
  403.            which emulates printf(), but which enables color printing and
  404.            other formating features.  tprintf() is over 15 times faster
  405.            than printf().  Also featuring editstr(), a powerful string
  406.            editor.
  407.  
  408. TDAT.LIB   Date and time functions for C and C++.
  409.  
  410. MOPS.LIB   Matrix operations library.  Written in 32-bit protected-mode
  411.            using the XLIB DOS extender.  Extremely fast and accurate.
  412.            Contact TechniLib for details.
  413.  
  414.  
  415. ******************************************************************************
  416. Improvements in XLIB Version 2.0 Over Version 1.0
  417. ******************************************************************************
  418.  
  419. 1) Procedures enabling protected-mode programming in C using inline 
  420.    assembly.
  421. 2) Protected-mode file routines which can transfer extended memory to files 
  422.    or files to extended memory.  Sequential and random access are supported.
  423. 3) Better interrupt management services.
  424. 4) User-defined descriptors.
  425. 5) More descriptors.  
  426. 6) More configurability.
  427. 7) Minor bug fixes
  428. 8) Better documentation.
  429.  
  430. ******************************************************************************
  431. Improvements in XLIB Version 3.0 Over Version 2.0
  432. ******************************************************************************
  433.  
  434. 1) Files included in Borland formats.
  435. 2) EASYX library included for those unfamiliar with assembly language.
  436. 3) MAPIO and PMMAPIO procedures added to XLIB for accessing memory-mapped 
  437.    input/output devices.
  438. 4) Better documentation
  439.  
  440. ******************************************************************************
  441. Improvements in XLIB Version 4.0 Over Version 3.0
  442. ******************************************************************************
  443.  
  444. Additions:
  445.  
  446.    The principal improvement in version 4.0 is the inclusion of libraries
  447. with exception trapping capabilities.  XLIB 4.0 can trap all protected-mode
  448. exceptions.  If DPMI 1.0 is installed, then real-mode exceptions can be
  449. trapped as well.  These libraries also contain new functions for managing
  450. debug watchpoints.
  451.    XLIB 3.0 was limited in that it did not allow the main program to spawn
  452. other processes.  This limitation has been corrected.
  453.    The global descriptor table has been made public in version 4.0.  
  454.    PMPRINT.ASM has been replaced with PMIO.INC.  The latter contains better
  455. print routines as well as new keyboard and speaker routines.  PMIO.INC is
  456. designed for either MASM or TASM.
  457.    The MOVMEM routine in EASYX has been redesigned to be faster and to be
  458. reentrant.  This routine may now be called in the main thread, in interrupt
  459. handlers, or both.
  460.    Microsoft BASIC 7.0 files have been included to illustrate usage of 
  461. EASYX.
  462.  
  463. Corrections:
  464.  
  465.    Version 4.0 corrects certain bugs and makes accommodations for anomalies
  466. in BIOS and common resident software.
  467.    The most severe bug in version 3.0 was a mistake in the include file
  468. XLIB.INC.  The combine type on segment DSEG was set to FAR_DATA, whereas it
  469. should have been DATA.
  470.    A second bug caused the machine to crash with a call to INITXLIB when
  471. certain memory managers were used with the NOEMS option.
  472.    Version 3.0 did not preserve the interrupt flag through mode switches.
  473. Instead it always enabled interrupts after the switch.  This lead to awkward
  474. situations when attempting to use SWITCHPM and SWITCHRM in interrupt 
  475. handlers.  Version 4.0 always preserves the interrupt flag through a mode 
  476. switch.
  477.    A bug prevented SWITCHPM and SWITCHRM from being reentrant under VCPI.
  478. This bug existed in both versions 3.0 and 3.1.  This would have caused a
  479. problem if nested mode switches were being performed, as would be the case
  480. with calls to DEFLECTPM or other mode switches within interrupt handlers.
  481.    Certain versions of SMARTDRV.EXE do not restore the global descriptor
  482. table register.  Version 3.0 was not prepared for this
  483.    Certain BIOS software interrupts return with interrupts enabled.  Neither
  484. version 3.0 nor version 3.1 were prepared for this anomaly.  It caused the
  485. machine to hang upon certain hardware interrupts, keypresses in particular.
  486.    The other bugs were applicable only when running XLIB in the absence of
  487. VCPI and DPMI (HIMEM.SYS only or no memory manager at all).  Accesses to
  488. extended memory failed in some cases.  In some cases the machine was left 
  489. in an unstable state.
  490.  
  491. ******************************************************************************
  492. Improvements in XLIB Version 4.1 Over Version 4.0
  493. ******************************************************************************
  494.  
  495.    Version 4.1 is minor upgrade.  The exception handler under version 4.0
  496. did not properly manage keypresses.  This problem has been corrected in
  497. version 4.1.  A minor bug has also been corrected in DONTREAD.ME.
  498.  
  499. ******************************************************************************
  500. Improvements in XLIB Version 5.0 Over Version 4.1
  501. ******************************************************************************
  502.    
  503.    XLIB version 5.0 is a major upgrade.  Changes include:
  504.  
  505. 1) Interrupt handlers for INT 23H (CTRL C) and INT 24H (DOS Critical Error)
  506.    are included in version 5.0.  In earlier version, termination under 
  507.    either of these interrupts left the machine in an unstable state.  
  508. 2) The FPU interrupt handler has been improved.  It now optionally presents 
  509.    a report of the FPU exception which includes the cause and location of 
  510.    the exception.
  511. 4) Version 5.0 contains new procedures for handling uncommitted memory.  
  512.    This is a very useful feature, but requires DPMI 1.0 (see below).
  513. 5) Earlier version of PMIO did not properly handle rounding in some very
  514.    rare cases.  A number such as 5.999999999 could have been printed as 5.0.
  515.    The new version of PMIO.INC does not assume that DS contains a flat-model 
  516.    selector.  PMIO may therefore be used with any segment settings.  Also
  517.    PMIO contains numerous additional procedures.  Those presently using PMIO
  518.    should consult the comments in this file before using the new version.
  519. 6) The archive for version 5.0 contains a new include file called FLAT.INC
  520.    This file enables flat-model programming under DOS.  The file is 
  521.    thoroughly documented.  FLAT.ASM illustrates usage of FLAT.INC.
  522. 7) Example files for TASM programmers have been modified to use the FARSTACK
  523.    option on the .MODEL statement.  See the discussion below about bugs
  524.    in compilers etc. for an explanation of this change.
  525. 8) Extensive changes have been made to documentation.
  526. 9) The availability of a protected-mode debugger is announced.  See the file
  527.    SWAT.DOC for details.
  528.  
  529.